package conservare.negocio;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.context.Flash;

import org.jrimum.bopepo.view.BoletoViewer;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import conservare.boleto.BoletoEmitidoBuilder;
import conservare.constantes.Constante;
import conservare.dao.ContaAReceberDAO;
import conservare.modelo.banco.CarteiraBoleto;
import conservare.modelo.banco.Conta;
import conservare.modelo.boleto.BoletoEmitido;
import conservare.modelo.contrato.Contrato;
import conservare.modelo.financeiro.ContaAReceber;
import conservare.modelo.financeiro.Pagamento;
import conservare.modelo.type.Mes;
import conservare.util.JSFUtil;

public class ContaAReceberRN {
	
	private ContaAReceberDAO dao;
	
	public ContaAReceberRN(){
		this.dao = new ContaAReceberDAO();
	}
	
	public ContaAReceber getById(Integer id){
		return this.dao.getById(id);
	}
	
	public ContaAReceber salvar(ContaAReceber contaAReceber){
		ContaAReceber contaAReceberSalvo = this.dao.salvar(contaAReceber);
		return getById(contaAReceberSalvo.getId());
	}
	
	
	public List<ContaAReceber> getTodos() {
		return dao.getTodos();
	}
	
	public List<ContaAReceber> getContasPendentesDePagamento() {
		return dao.getContasPendentesDePagamento();
	}
	
	public List<ContaAReceber> getContasPagas() {
		return dao.getContasPagas();
	}
	
/*	public List<Contrato> obterContratosParaOsQuaisHouveLancamentoNoAnoMes(Integer anoDeReferencia, Integer mesDeReferencia){
		return dao.obterContratosParaOsQuaisHouveLancamentoNoAnoMes(anoDeReferencia, mesDeReferencia);
	}*/
	public boolean isContratoJaLancado(Contrato contrato, Integer anoRef, Mes mesRef){
		return this.dao.isContratoJaLancado(contrato, anoRef, mesRef);
	}
	
	public void efetuarBaixa(ContaAReceber contaAReceber, Pagamento pagamento){
		contaAReceber.incluirPagamento(pagamento);
		salvar(contaAReceber);
	}

	public String getMesesDeLancamentosRecentesDesteContrato(Contrato contrato, int topN) {
		return this.dao.getMesesDeLancamentosRecentesDesteContrato(contrato, topN);
	}
	
	
}
